<?php

define('LOGIN_PAGE', '?logowanie');

/**
 * @author Marcin Baniowski
 * @name Bsystem
 * @since 04.03.2011
 * @version 0.0
 * TODO (najważniejsze) - polskie znaki . Potem - logowanie
 */
class Bsystem {
	// public, private, protected  [?]

	/**
	 * [?]
	 */
	public function __construct() {
		$domain = "http://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; // TODO construct ?
	}

	/**
	 * Glowna metoda aplikacji rozpoczynajaca jej dzialanie,
	 * inicjuje Smarty, nawiazuje polaczenie z baza danych.
	 *
	 */
	public function SystemInit() {
		ob_start("ob_gzhandler");
		header('content-type: text/html; charset=UTF-8'); // TODO - header ?
		if (is_callable(date_default_timezone_set('Europe/Warsaw'))) // default time zone
			date_default_timezone_set('Europe/Warsaw');
		// TODO - inicjalizacja połączenia z bazą
		//$this->ZdefiniujKomunikaty();
		//$this->PobierzUstawienia();

		$smarty = $this->InitSmarty();

		$users = new Users();

		if (isset($_SERVER['SCRIPT_FILENAME']) && strlen($_SERVER['SCRIPT_FILENAME']) > 0)
			$file = $_SERVER['SCRIPT_FILENAME'];
		elseif (isset($_SERVER['argv'][0]) && strlen($_SERVER['argv'][0]) > 0)
			$file = $_SERVER['argv'][0];
		else {
			echo 'Nie rozpoznano nazwy skryptu!';
			die();
		}

		$php_ext = '.' . PHP_EXT;
		$file = str_replace(array('cron_job_', 'forked_job_'), '', basename($file, $php_ext));
		// TODO -  define('SCRIPT_NAME', $file);
		switch ($file) {
			// SKRYPT GLOWNY - wywoływany na starcie, jeżeli w url jest 'index.php
			// pozostałe case'y - inne pliki np. samouczki.php i cron
			case "index.php":
				if (isset($_REQUEST['logowanie']) || isset($_POST['zaloguj']))
					$this->ObsluzLogowanie($smarty, $users);
				elseif (isset($_REQUEST['wyloguj']))
					$this->ObsluzWylogowanie($users, $smarty);
				elseif (!$users->CheckIfLogged()) {
					$_REQUEST = array();
					$_REQUEST['przekierowanie'] = $_SERVER['REQUEST_URI'];
					$this->ObsluzLogowanie($smarty, $users);
				}

				$this->WyswietlTresc($smarty);
				break;
		}
	}

	/**
	 * Inicjalizuje biblioteke Smarty, zwraca obiekt tej klasy.
	 *
	 * @return obj Smarty
	 */
	public function InitSmarty() {
		$smarty = new Smarty;
		$smarty->template_dir = SMARTY_TEMPLATE_DIR;
		$smarty->compile_dir = SMARTY_COMPILE_DIR;

		return $smarty;
	}

	// TODO - WyswietlTresc - przeanalizować dokładnie na podst agrotime
	public function WyswietlTresc($smarty) {

		// próba bazy danych
		$db = new Db(); // TODO - zamykanie połączenia $db = null ?

		switch ($_REQUEST['pokaz']) {
			case "przyklad":
				echo "asdf";
				exit;
				break;
			case "pulpit":
				$strony = new Strony();
				$strony->PokazPulpit($smarty);
				break;
//			default:
//              //$ligi = $db->fetchAll('select *,k.name as kolejka_name from kolejka k left join ligues l on l.id = k.ligue_id');
//				$users = $db->fetchAll('select * from '.DB_PREFIX.'users');
//				$smarty->assign('ligi', $users);
//
//				$smarty->assign('polskie_znaki', 'ęąłźóćśńż');
//				break;
		}

//		$smarty->assign('content', 'tpl/start.tpl');
		$smarty->assign("czas_generowania", $this->PobierzCzasGenerowania(START_TIME));
		$smarty->display('tpl/index.tpl');
	}

	/**
	 * Zwraca czas generowania strony w sekundach
	 * na podstawie podanego startowego znacznika czasu.
	 *
	 * @param int $start_time
	 * @return str
	 */
	private function PobierzCzasGenerowania($start_time) {
		$now = microtime(true);
		$time = round($now - $start_time, 2) . ' s';

		return $time;
	}

	/**
	 * Sprawdz, czy przegladarka uzytkownika jest kompatybilna
	 * z systemem, zwraca wynik sprawdzenia.
	 *
	 * @return bool
	 */
	public function BrowserCompatibilityCheck() {
		if (isset($_SERVER['HTTP_USER_AGENT'])) {
			$x = strtolower($_SERVER['HTTP_USER_AGENT']);

			$browser = new Browser($x);

			if (substr_count($x, "opera") != 0)
				return true;
			elseif (substr_count($x, "rv:1.") != 0 || substr_count($x, "firefox") != 0)
				return true;
			elseif (substr_count($x, "safari") != 0)
				return true;
			elseif (substr_count($x, "chrome") != 0)
				return true;
			elseif (strpos($browser->Name, 'msie') !== false && floatval($browser->Version) >= 8)
				return true;
			else
				return false;
		}
		else
			return false;
	}

	/**
	 * Obsluguje logowanie do aplikacji.
	 *
	 * @param obj $smarty
	 * @param obj $users
	 */
	private function ObsluzLogowanie(&$smarty, &$users) {
		$smarty->assign("pagetitle", SYSTEM_NAME . " - Logowanie");
		$smarty->assign("form_link", LOGIN_PAGE);
		if ($users->CheckIfLogged()) { // byl zalogowany
			$_REQUEST = array();
			$this->WyswietlTresc($smarty);
			die();
		}

		if (isset($_REQUEST['wylogowano'])) { // poprawne wylogowanie
			if ($this->pageMobile)
				$smarty->assign('message', 'Zostałeś poprawnie wylogowany(a)!');
			else
				$smarty->assign("message", "Zostałeś poprawnie wylogowany(a)!");
		}
		elseif (isset($_POST['zaloguj']) && trim($_POST['username'] != "") &&
				trim($_POST['password']) != "" && $_POST['username'] != "U?ytkownik") { // przeslano dane
			if ($users->LoginTry($_POST['username'], $_POST['password'])) { // zalogowano poprawnie
				if (isset($_REQUEST['redirect_back']) && strlen($_REQUEST['redirect_back']) > 0)
					$this->Redirect(urldecode($_REQUEST['redirect_back']));
				elseif (isset($_REQUEST['przekierowanie']) && strlen(urldecode($_REQUEST['przekierowanie'])) > 1) {
					$this->WyswietlTresc($smarty);
					die();
				} else {
					$this->WyswietlTresc($smarty);
					die();
				}
			}
			else  // nieprawidlowe dane
				$smarty->assign("message", "Błędna nazwa użytkownika/hasło!");
		}
		if ((isset($_REQUEST['przekierowanie']) && strlen(urldecode($_REQUEST['przekierowanie'])) > 1)
				|| (isset($_REQUEST['pokaz']) && $_REQUEST['pokaz'] != "pulpit")) {
			$smarty->assign("form_link", $_SERVER['REQUEST_URI']);
			$smarty->assign("message", "Zaloguj się, by uzyskać dostęp do tego modułu!");
		}
		else
			$smarty->assign("form_link", '?pokaz=pulpit');

		if (!$this->BrowserCompatibilityCheck()) {
			$smarty->assign('message', 'Twoja przeglądarka nie spełnia <br />wymagań technicznych systemu!
										 <p>Pobierz za darmo <br /><a target="_blank" href="http://firefox.pl">Firefox-a</a>,
										 <a target="_blank" href="http://www.opera.com/download/">Oper?</a>,
										 <a href="http://www.apple.com/pl/safari/" target="_blank">Safari</a><br />
										 lub <a href="http://www.google.com/chrome/">Google Chrome</a><br />
										 w polskiej wersji j?zykowej!</p>');
			$smarty->assign('disable_button', true);
		}
		
		$smarty->display("login.tpl");
	}

}

?>